import express from 'express';
import initUpload from '../../util/upload.js';
import * as users from '../../controllers/users.js';
import { getToken, auth } from '../../auth/auth.js';

// 配置文件上传 - 使用upload.js工具函数
// 参数：文件大小限制(5MB)，文件类型正则，存储路径
const upload = initUpload(5 * 1024 * 1024, /jpeg|jpg|png|gif/, 'public/uploads/');

const router = express.Router();

// 1. 用户登录接口
router.post('/login', async (req, res, next) => {
  try {
    console.log('开始处理 /admin/user/login 请求...');
    const { username, password } = req.body;
    
    if (!username || !password) {
      return res.status(400).send({
        code: 400,
        msg: "用户名和密码不能为空"
      });
    }

    // 逻辑验证
    if (username === 'admin' && password === '123456') {
      // 使用JWT生成token
      const token = getToken({ username });
      res.send({
        code: 200,
        msg: "登录成功",
        token: 'Bearer ' + token
      });
    } else {
      res.status(401).send({
        code: 401,
        msg: "用户名或密码错误"
      });
    }
  } catch (error) {
    console.error('用户登录失败:', error);
    res.status(500).send({
      code: 500,
      msg: "登录失败"
    });
  }
});

// 2. 获取用户信息接口
router.get('/info', auth(), async (req, res, next) => {
  try {
    console.log('开始处理 /admin/user/info 请求...');

    // 确保数据库表和初始数据存在
    await users.createAdminUsersTable();
    await users.initAdminUser();
    
    // 从数据库获取用户信息
    const userData = await users.getAdminUser();
    if (userData.length === 0) {
      return res.status(404).send({
        code: 404,
        msg: "用户不存在"
      });
    }

    const user = userData[0];
    res.send({
      code: 200,
      msg: "获取成功",
      data: {
        nickname: user.nickname,
        userPic: user.userPic
      }
    });
  } catch (error) {
    console.error('获取用户信息失败:', error);
    res.status(500).send({
      code: 500,
      msg: "获取用户信息失败"
    });
  }
});

// 3. 获取用户详情接口
router.get('/detail', auth(), async (req, res, next) => {
  try {
    console.log('开始处理 /admin/user/detail 请求...');

    // 确保数据库表和初始数据存在
    await users.createAdminUsersTable();
    await users.initAdminUser();
    
    // 从数据库获取用户详情
    const userData = await users.getAdminUser();
    if (userData.length === 0) {
      return res.status(404).send({
        code: 404,
        msg: "用户不存在"
      });
    }

    const user = userData[0];
    res.send({
      code: 200,
      msg: "获取成功",
      data: {
        username: user.username,
        nickname: user.nickname,
        email: user.email,
        userPic: user.userPic,
        password: process.env.NODE_ENV === 'development' ? (user.password || "123456") : "******"
      }
    });
  } catch (error) {
    console.error('获取用户详情失败:', error);
    res.status(500).send({
      code: 500,
      msg: "获取用户详情失败"
    });
  }
});

// 4. 编辑用户信息接口
router.post('/edit', auth(), upload.single('userPic'), async (req, res, next) => {
  try {
    console.log('开始处理 /admin/user/edit 请求...');
    console.log('请求体数据:', req.body);
    console.log('上传的文件:', req.file);

    // 健壮性参数校验
    let nickname = req.body?.nickname ?? "";
    let email = req.body?.email ?? "";
    
    if (nickname == "" || email == "") {
      return res.send({
        code: 400,
        msg: "参数有误"
      });
    }

    // 处理上传的头像文件
    let userPicPath = "/uploads/admin-avatar.jpg"; // 默认头像
    if (req.file) {
      // upload.js工具函数生成的文件路径
      userPicPath = `/uploads/${req.file.filename}`;
      console.log('使用上传的头像:', userPicPath);
    } else {
      // 如果没有上传新头像，保持当前头像
      console.log('没有上传新头像，获取当前头像...');
      const currentUser = await users.getAdminUser();
      if (currentUser.length > 0) {
        userPicPath = currentUser[0].userPic;
        console.log('当前头像:', userPicPath);
      }
    }

    console.log('开始更新用户信息:', { nickname, email, userPicPath });
    // 更新数据库中的用户信息
    await users.updateAdminUser(nickname, email, userPicPath);
    console.log('用户信息更新完成');

    res.send({
      code: 200,
      msg: "修改成功"
    });
  } catch (error) {
    console.error('编辑用户信息失败:', error);
    console.error('错误堆栈:', error.stack);
    res.status(500).send({
      code: 500,
      msg: "修改失败: " + error.message
    });
  }
});

export default router;
